package ru.compft.common.data;

import ru.compft.common.data.meta.ModulePageTableMeta;
import ru.compft.common.data.meta.ModulePageTableMeta;

import javax.persistence.*;
import java.io.Serializable;

/**
 * User: ASUS
 * Date: 21.08.12
 * Time: 23:00
 * Класс представляющий объект "Страница модуля"
 */
@Entity
@Table(name = ModulePageTableMeta.TABLE_NAME)
public class ModulePage implements Serializable, Comparable {
    private static final long serialVersionUID = 8580380927910054498L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = ModulePageTableMeta.ID, unique = true, nullable = false)
    private Long id;

    @Column(name = ModulePageTableMeta.MODULE_ID, nullable = false)
    private Long moduleId; // ID родительского модуля

    @Column(name = ModulePageTableMeta.CODE, unique = true, nullable = false)
    private String code; // Код страницы

    @Column(name = ModulePageTableMeta.NAME, nullable = false)
    private String name; // Название страницы

    @Column(name = ModulePageTableMeta.DESCRIPTION)
    private String description; // Описание страницы

    @Column(name = ModulePageTableMeta.VISIBLE, length = 1)
    private boolean visible; // Отображаемый

    @Column(name = ModulePageTableMeta.POSITION_ORDER, unique = true, nullable = false)
    private int order; // Порядок при отображении

    public ModulePage() {
    }

    public ModulePage(Long id, Long moduleId, String code, String name, String description, boolean visible, int order) {
        this.id = id;
        this.moduleId = moduleId;
        this.code = code;
        this.name = name;
        this.description = description;
        this.visible = visible;
        this.order = order;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getModuleId() {
        return moduleId;
    }

    public void setModuleId(Long moduleId) {
        this.moduleId = moduleId;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public boolean isVisible() {
        return visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
    }

    public int getOrder() {
        return order;
    }

    public void setOrder(int order) {
        this.order = order;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("ModulePage");
        sb.append("{id=").append(id);
        sb.append(", moduleId=").append(moduleId);
        sb.append(", code='").append(code).append('\'');
        sb.append(", name='").append(name).append('\'');
        sb.append(", description='").append(description).append('\'');
        sb.append(", visible=").append(visible);
        sb.append(", order=").append(order);
        sb.append('}');
        return sb.toString();
    }

    @Override
    public int compareTo(Object o) {
        if (o != null && o instanceof ModulePage) {
            ModulePage page = (ModulePage) o;
            return this.getOrder() > page.getOrder() ? 1 : (this.getOrder() < page.getOrder() ? -1 : 0);
        }
        return 1;
    }
}
